﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Services;
using Newtonsoft.Json;
using Vizzio.DAL;
using Vizzio.Models;

namespace Vizzio.Service
{
    /// <summary>
    /// Descripción breve de WebServiceGetProductos
    /// </summary>

    [WebService(Namespace = "http://localhost.com/webservices/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // Para permitir que se llame a este servicio web desde un script, usando ASP.NET AJAX, quite la marca de comentario de la línea siguiente. 
    [System.Web.Script.Services.ScriptService]
    public class WebServiceGetProductos : System.Web.Services.WebService
    {
        private VizzioContext db = new VizzioContext();
        [WebMethod]
        public string HelloWorld()
        {
            return "Hola a todos";
        }

        [WebMethod]
        public String ObtenerProductos()
        {
            List<Producto> aux = db.Productoes.ToList();
            foreach (Producto p in aux)
            {
                p.present = p.Presentacion.NombrePresentacion;
            }
            return JsonConvert.SerializeObject(aux);
        }

        [WebMethod]
        public String ObtenerSocios()
        {
            List<Socio> socios = db.Socios.ToList();
            return JsonConvert.SerializeObject(socios);
        }  

        [WebMethod]
        public String ObtenerClienteDeSocio(string SocioID)
        {
            List<Cliente> clientes = db.Clientes.ToList();
            clientes=clientes.Where(c => c.SocioID.ToString().Equals(SocioID) && c.Eliminado==false).ToList();
            return JsonConvert.SerializeObject(clientes);
        }

        [WebMethod]
        public String NuevoCiSocioDisponible(string CI)
        {
            bool res = false;
            long auxCi;
            try
            {
                auxCi = long.Parse(CI);
            }
            catch 
            {
                auxCi = 0;
            }
            int socios = db.Socios.Where(socio => socio.CI == auxCi && socio.Eliminado==false).ToList().Count();
            if(socios<=0)
                res=true;
            return JsonConvert.SerializeObject(res);
        }

        [WebMethod]
        public String ModificarCiSocioDisponible(string CI, string SocioID)
        {
            bool res = false;
            long auxCi;
            long auxID;
            try
            {
                auxCi = long.Parse(CI);
                auxID = int.Parse(SocioID);
            }
            catch 
            {
                auxCi = 0;
                auxID = 0;
            }
            int socios = db.Socios.Where(socio => socio.CI == auxCi && socio.SocioID != auxID && socio.Eliminado == false).ToList().Count();
            if (socios <= 0)
                res = true;
            return JsonConvert.SerializeObject(res);
        }
        [WebMethod]
        public String NuevoCiClienteDisponible(string CI)
        {
            bool res = false;
            long auxCi;
            try
            {
                auxCi = long.Parse(CI);
            }
            catch
            {
                auxCi = 0;
            }
            int clientes = db.Clientes.Where(cliente =>cliente.CI == auxCi && cliente.Eliminado == false).ToList().Count();
            if (clientes <= 0)
                res = true;
            return JsonConvert.SerializeObject(res);
        }
        [WebMethod]
        public String ModificarCiClienteDisponible(string CI, string ClienteID)
        {
            bool res = false;
            long auxCi;
            long auxID;
            try
            {
                auxCi = long.Parse(CI);
                auxID = int.Parse(ClienteID);
            }
            catch
            {
                auxCi = 0;
                auxID = 0;
            }
            int clientes = db.Clientes.Where(cliente => cliente.CI == auxCi && cliente.ClienteID != auxID && cliente.Eliminado == false).ToList().Count();
            if (clientes <= 0)
                res = true;
            return JsonConvert.SerializeObject(res);
        }
        [WebMethod]
        public String NuevoNombreProductoDisponible(string Nombre, string Presentacion)
        {            
            bool res = false;
            int idPresentacion = 0;
            if (!string.IsNullOrEmpty(Presentacion))
            {
                idPresentacion = int.Parse(Presentacion);
            }            
            int productos = db.Productoes.Where(producto =>producto.Nombre == Nombre && producto.PresentacionID==idPresentacion ).ToList().Count();
            if (productos <= 0)
                res = true;
            return JsonConvert.SerializeObject(res);
        }

        [WebMethod]
        public String DetalleGastoDeImportacionDisponible(string Detalle, string ImportacionID)
        {
            bool res = false;
            int auxImportacionID = int.Parse(ImportacionID);
            int gastos = db.GastosDeImportacion.Where(gasto => gasto.Detalle.ToUpper().Contains(Detalle) && gasto.IngresoDeProductoID == auxImportacionID).ToList().Count();
            if (gastos <= 0)
                res = true;
            return JsonConvert.SerializeObject(res);
        }

        
        [WebMethod]
        public String ModificarDetalleGastoDeImportacionDisponible(string Detalle, string GastoID)
        {
            bool res = false;
            int auxGastoID=int.Parse(GastoID);
            GastosDeImportacion gastoDeImportacion = db.GastosDeImportacion.Find(auxGastoID);
            int gastos = db.GastosDeImportacion.Where(gasto => gasto.Detalle.ToUpper().Contains(Detalle) && gasto.GastosDeImportacionID != gastoDeImportacion.GastosDeImportacionID && gasto.IngresoDeProductoID == gastoDeImportacion.IngresoDeProductoID).ToList().Count();
            if (gastos <= 0)
                res = true;
            return JsonConvert.SerializeObject(res);
        }

        [WebMethod]
        public String ObtenerCodigoParaIngresoDeProducto(string Concepto)
        {
            string res =generarCodigoParaIngresoDeProducto(Concepto);
            return JsonConvert.SerializeObject(res);
        }

        private string generarCodigoParaIngresoDeProducto(string Concepto)
        {
            string codigo = DateTime.Today.Year.ToString();
            int dia = DateTime.Today.Day;
            int mes = DateTime.Today.Month;
            if (mes < 10)
            {
                codigo = codigo + "0" + mes.ToString();
            }
            else
            {
                codigo = codigo + mes.ToString();
            }
            if (dia < 10)
            {
                codigo = codigo + "0" + dia.ToString();
            }
            else
            {
                codigo = codigo + dia.ToString();
            }
            if (Concepto == "Importacion")
            {
                string aux = "I-" + codigo;
                int ingresoDeProductos = db.IngresoDeProductos.Where(ingresoDeProducto => ingresoDeProducto.CodigoDeIngresoDeProducto.Contains(aux)).ToList().Count();
                codigo=aux+"-"+ingresoDeProductos;
            }
            else
            {
                if (Concepto.Equals("InventarioInicial"))
                {
                    string aux = "II-" + codigo;
                    int ingresoDeProductos = db.IngresoDeProductos.Where(ingresoDeProducto => ingresoDeProducto.CodigoDeIngresoDeProducto.Contains(aux)).ToList().Count();
                    codigo = aux + "-" + ingresoDeProductos;
                }
                else
                {
                    if (Concepto.Equals("Otros"))
                    {
                        string aux = "O-" + codigo;
                        int ingresoDeProductos = db.IngresoDeProductos.Where(ingresoDeProducto => ingresoDeProducto.CodigoDeIngresoDeProducto.Contains(aux)).ToList().Count();
                        codigo = aux+ "-" + ingresoDeProductos;
                    }
                }
            }
            return codigo;
        }

        [WebMethod]
        public String ObtenerPresentaciones()
        {
            List<Presentacion> presentaciones = db.Presentaciones.ToList();
            return JsonConvert.SerializeObject(presentaciones);
        }
        
        [WebMethod]
        public String RegistrarPresentacion(string NombrePresentacion)
        {
            Presentacion p = new Presentacion();
            p.NombrePresentacion = NombrePresentacion;
            db.Presentaciones.Add(p);
            db.SaveChanges();
            List<Presentacion> presentaciones = db.Presentaciones.ToList();
            return JsonConvert.SerializeObject(presentaciones);

        }
        

    }


}
